package com.ruoyi.common.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.enums.LimitType;

/**
 * 限流注解
 * 用于标记需要进行限流控制的方法，通过配置限流参数来限制接口的访问频率
 *
 * @author ruoyi
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter {
    /**
     * 限流key
     * 用于标识限流的唯一键值，默认使用系统预定义的限流键
     */
    public String key() default CacheConstants.RATE_LIMIT_KEY;

    /**
     * 限流时间,单位秒
     * 定义限流统计的时间窗口大小，默认为60秒
     */
    public int time() default 60;

    /**
     * 限流次数
     * 在指定时间窗口内允许的最大访问次数，默认为100次
     */
    public int count() default 100;

    /**
     * 限流类型
     * 定义限流的策略类型，默认为DEFAULT类型
     */
    public LimitType limitType() default LimitType.DEFAULT;
}

